/*******************************************************************************
  * 文件：Hardware_Uart.c
  * 作者：zyz
  * 版本：v1.0.0
  * 日期：2017-08-03
  * 说明：串口相关
*******************************************************************************/

/* 头文件 *********************************************************************/
#include "Hardware_Uart.h"
#include "lib_config.h"

/* 宏定义 *********************************************************************/
/* 类型定义 *******************************************************************/
/* 变量定义 *******************************************************************/
/* 函数声明 *******************************************************************/


/* 函数定义 *******************************************************************/

/*********************************************************
函数名: void UART5Init(void)
描  述: UART初始化子程序
输入值: 无
输出值: 无
返回值: WiFi通讯接口/Debug
**********************************************************/
static void UART5Init(void)
{
    GPIO_InitStruType y;
    UART_InitStruType uart;

    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
    y.GPIO_Func = GPIO_Func_3;                     //复用功能3
    y.GPIO_Direction = GPIO_Dir_Out;
    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
    y.GPIO_OD = GPIO_ODE_Output_Disable;
    y.GPIO_DS = GPIO_DS_Output_Strong;
    GPIO_Init(GPIOA,GPIO_Pin_4,&y);                //PA4---TxD

    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
    y.GPIO_Func = GPIO_Func_7;                     //复用功能7
    y.GPIO_Direction = GPIO_Dir_In;
    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
    y.GPIO_OD = GPIO_ODE_Output_Disable;
    y.GPIO_DS = GPIO_DS_Output_Strong;
    GPIO_Init(GPIOA,GPIO_Pin_5,&y);                //PA5---RxD

    uart.UART_StopBits = UART_StopBits_1;          //停止位1
    uart.UART_TxMode = UART_DataMode_8;            //数据位8
    uart.UART_TxPolar = UART_Polar_Normal;         //正常极性
    uart.UART_RxMode = UART_DataMode_8;            //数据位8
    uart.UART_RxPolar = UART_Polar_Normal;         //正常极性
    uart.UART_BaudRate = 115200;                     //波特率
    uart.UART_ClockSet = UART_Clock_1;             //波特率时钟发生器:Pclk
    UART_Init(UART5,&uart);

    UART_TBIMConfig(UART5,UART_TRBIM_Byte);        // 发送字节中断模式
    UART_RBIMConfig(UART5, UART_TRBIM_Byte);       // 接收字节中断模式
    UART_ITConfig(UART5,UART_IT_RB,ENABLE);        // 使能接收中断
    UART_ITConfig(UART5,UART_IT_TB,DISABLE);       // 关闭发送中断
    NVIC_Init(NVIC_UART5_IRQn,NVIC_Priority_3,ENABLE);// 配置NVIC
    UART5_TxEnable();                              // 使能发送
    UART5_RxEnable();                              // 使能接收
}

/*********************************************************
函数名: void UART4Init(void)
描  述: UART4初始化子程序
输入值: 无
输出值: 无
返回值: Touch串口
**********************************************************/
static void UART4Init(void)
{
    GPIO_InitStruType y;
    UART_InitStruType uart;

    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
    y.GPIO_Func = GPIO_Func_7;                     //复用功能7
    y.GPIO_Direction = GPIO_Dir_Out;
    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
    y.GPIO_OD = GPIO_ODE_Output_Disable;
    y.GPIO_DS = GPIO_DS_Output_Strong;
    GPIO_Init(GPIOB,GPIO_Pin_10,&y);               //PB10---TxD

    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
    y.GPIO_Func = GPIO_Func_7;                     //复用功能7
    y.GPIO_Direction = GPIO_Dir_In;
    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
    y.GPIO_OD = GPIO_ODE_Output_Disable;
    y.GPIO_DS = GPIO_DS_Output_Strong;
    GPIO_Init(GPIOB,GPIO_Pin_9,&y);                //PB9---RxD

    uart.UART_StopBits = UART_StopBits_1;          //停止位1
    uart.UART_TxMode = UART_DataMode_8;            //数据位8
    uart.UART_TxPolar = UART_Polar_Normal;         //正常极性
    uart.UART_RxMode = UART_DataMode_8;            //数据位8
    uart.UART_RxPolar = UART_Polar_Normal;         //正常极性
    uart.UART_BaudRate = 19200;                    //波特率
    uart.UART_ClockSet = UART_Clock_1;             //波特率时钟发生器:Pclk
    UART_Init(UART4,&uart);

    UART_TBIMConfig(UART4,UART_TRBIM_Byte);        // 发送字节中断模式
    UART_RBIMConfig(UART4, UART_TRBIM_Byte);       // 接收字节中断模式
    UART_ITConfig(UART4,UART_IT_RB,ENABLE);        // 使能接收中断
    UART_ITConfig(UART4,UART_IT_TB,DISABLE);       // 关闭发送中断
    NVIC_Init(NVIC_UART4_IRQn,NVIC_Priority_2,ENABLE);// 配置NVIC
    UART4_TxEnable();                              // 使能发送
    UART4_RxEnable();                              // 使能接收
}

/*********************************************************
函数名: void UART3Init(void)
描  述: UART初始化子程序
输入值: 无
输出值: 无
返回值: 板级通讯2串口 - 左侧一、二号炉头
**********************************************************/
static void UART3Init(void)
{
    GPIO_InitStruType y;
    UART_InitStruType uart;

    // PB7 - TX(UART3) - GPIO
    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
    y.GPIO_Func = GPIO_Func_5;                     //复用功能5
    y.GPIO_Direction = GPIO_Dir_Out;
    y.GPIO_PUEN = GPIO_PUE_Input_Disable;
    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
    y.GPIO_OD = GPIO_ODE_Output_Disable;
    y.GPIO_DS = GPIO_DS_Output_Strong;
    GPIO_Init(GPIOB,GPIO_Pin_7,&y);                //PB7---TxD

    // PB8 - RX(UART3) - GPIO
    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
    y.GPIO_Func = GPIO_Func_2;                     //复用功能2
    y.GPIO_Direction = GPIO_Dir_In;
    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
    y.GPIO_OD = GPIO_ODE_Output_Disable;
    y.GPIO_DS = GPIO_DS_Output_Strong;
    GPIO_Init(GPIOB,GPIO_Pin_8,&y);                //PB8---RxD

    uart.UART_StopBits = UART_StopBits_1;          //停止位1
    uart.UART_TxMode = UART_DataMode_8;            //数据位8
    uart.UART_TxPolar = UART_Polar_Normal;         //正常极性
    uart.UART_RxMode = UART_DataMode_8;            //数据位8
    uart.UART_RxPolar = UART_Polar_Normal;         //正常极性
    uart.UART_BaudRate = 4800;                     //波特率
    uart.UART_ClockSet = UART_Clock_1;             //波特率时钟发生器:Pclk
    UART_Init(UART3,&uart);

    UART_TBIMConfig(UART3,UART_TRBIM_Byte);        // 发送字节中断模式
    UART_RBIMConfig(UART3, UART_TRBIM_Byte);       // 接收字节中断模式
    UART_ITConfig(UART3,UART_IT_RB,ENABLE);        // 使能接收中断
    UART_ITConfig(UART3,UART_IT_TB,DISABLE);       // 关闭发送中断 - 这个先不动
    NVIC_Init(NVIC_UART3_IRQn,NVIC_Priority_3,ENABLE);// 配置NVIC
    UART3_TxEnable();                              // 使能发送
    UART3_RxEnable();                              // 使能接收
}

/*********************************************************
函数名: void UART2Init(void)
描  述: UART2初始化程序
输入值: 无
输出值: 无
返回值: 触摸芯片通讯接口
**********************************************************/
//static void UART2Init(void)
//{
//    GPIO_InitStruType y;
//    UART_InitStruType uart;
//
//    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
//    y.GPIO_Func = GPIO_Func_3;                      //复用功能3
//    y.GPIO_Direction = GPIO_Dir_Out;
//    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
//    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
//    y.GPIO_OD = GPIO_ODE_Output_Disable;
//    y.GPIO_DS = GPIO_DS_Output_Strong;
//    GPIO_Init(GPIOB,GPIO_Pin_7,&y);                //PB7---TxD
//
//    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
//    y.GPIO_Func = GPIO_Func_3;                      //复用功能3
//    y.GPIO_Direction = GPIO_Dir_In;
//    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
//    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
//    y.GPIO_OD = GPIO_ODE_Output_Disable;
//    y.GPIO_DS = GPIO_DS_Output_Strong;
//    GPIO_Init(GPIOB,GPIO_Pin_6,&y);                //PB6---RxD
//
//    uart.UART_StopBits = UART_StopBits_1;           //停止位1
//    uart.UART_TxMode = UART_DataMode_8;             //数据位8
//    uart.UART_TxPolar = UART_Polar_Normal;          //正常极性
//    uart.UART_RxMode = UART_DataMode_8;             //数据位8
//    uart.UART_RxPolar = UART_Polar_Normal;          //正常极性
//    uart.UART_BaudRate = 19200;                     //19200波特率
//    uart.UART_ClockSet = UART_Clock_1;              //波特率时钟发生器:Pclk
//    UART_Init(UART2,&uart);                         //初始化UART
//
//    UART_TBIMConfig(UART2,UART_TRBIM_Byte);         //发送字节中断模式
//    UART_RBIMConfig(UART2,UART_TRBIM_Byte);         //接收字节中断模式
//    UART_ITConfig(UART2,UART_IT_RB,ENABLE);         //使能接收中断
//    UART_ITConfig(UART2,UART_IT_TB,DISABLE);        //关闭发送中断
//    NVIC_Init(NVIC_UART2_IRQn,NVIC_Priority_2,ENABLE);// NVIC配置
//    UART2_TxEnable();                               //使能发送
//    UART2_RxEnable();                               //使能接收
//}

/*********************************************************
函数名: void UART1Init(void)
描  述: UART1初始化程序
输入值: 无
输出值: 无
返回值: 显示板通讯接口
**********************************************************/
//static void UART1Init(void)
//{
//    GPIO_InitStruType y;
//    UART_InitStruType uart;
//    
//    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
//    y.GPIO_Func = GPIO_Func_2;                      //复用功能2
//    y.GPIO_Direction = GPIO_Dir_Out;
//    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
//    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
//    y.GPIO_OD = GPIO_ODE_Output_Disable;
//    y.GPIO_DS = GPIO_DS_Output_Strong;
//    GPIO_Init(GPIOB,GPIO_Pin_3,&y);                //PB3---TxD
//
//    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
//    y.GPIO_Func = GPIO_Func_2;                      //复用功能2
//    y.GPIO_Direction = GPIO_Dir_In;
//    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
//    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
//    y.GPIO_OD = GPIO_ODE_Output_Disable;
//    y.GPIO_DS = GPIO_DS_Output_Strong;
//    GPIO_Init(GPIOB,GPIO_Pin_2,&y);                //PB2---RxD
//
//    uart.UART_StopBits = UART_StopBits_1;           //停止位1
//    uart.UART_TxMode = UART_DataMode_8;             //数据位8
//    uart.UART_TxPolar = UART_Polar_Normal;          //正常极性
//    uart.UART_RxMode = UART_DataMode_8;             //数据位8
//    uart.UART_RxPolar = UART_Polar_Normal;          //正常极性
//    uart.UART_BaudRate = 19200;                    //19200波特率
//    uart.UART_ClockSet = UART_Clock_1;              //波特率时钟发生器:Pclk
//    UART_Init(UART1,&uart);                         //初始化UART
//
//    UART_TBIMConfig(UART1,UART_TRBIM_Byte);         //发送字节中断模式
//    UART_RBIMConfig(UART1,UART_TRBIM_Byte);         //接收字节中断模式
//    UART_ITConfig(UART1,UART_IT_RB,ENABLE);         //使能接收中断
//    UART_ITConfig(UART1,UART_IT_TB,DISABLE);        //关闭发送中断
//    NVIC_Init(NVIC_UART1_IRQn,NVIC_Priority_2,ENABLE);// NVIC配置
//    UART1_TxEnable();                               //使能发送
//    UART1_RxEnable();                               //使能接收
//}

/*********************************************************
函数名: void UART0Init(void)
描  述: UART0初始化程序
输入值: 无
输出值: 无
返回值: 板级通讯1接口 - 右侧三、四号炉头
**********************************************************/
static void UART0Init(void)
{
    GPIO_InitStruType y;
    UART_InitStruType uart;
    
    // PB17 - TX(UART0) - GPIO
    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
    y.GPIO_Func = GPIO_Func_4;                      //复用功能4
    y.GPIO_Direction = GPIO_Dir_Out;
    y.GPIO_PUEN = GPIO_PUE_Input_Disable;           // 输入全部禁止
    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
    y.GPIO_OD = GPIO_ODE_Output_Disable;
    y.GPIO_DS = GPIO_DS_Output_Strong;
    GPIO_Init(GPIOB,GPIO_Pin_17,&y);                //PB17---TxD

    // PB20 - RX(UART0) - GPIO
    y.GPIO_Signal = GPIO_Pin_Signal_Digital;
    y.GPIO_Func = GPIO_Func_1;                      //复用功能1
    y.GPIO_Direction = GPIO_Dir_In;
    y.GPIO_PUEN = GPIO_PUE_Input_Enable;
    y.GPIO_PDEN = GPIO_PDE_Input_Disable;
    y.GPIO_OD = GPIO_ODE_Output_Disable;
    y.GPIO_DS = GPIO_DS_Output_Strong;
    GPIO_Init(GPIOB,GPIO_Pin_20,&y);                //PB20---RxD

    uart.UART_StopBits = UART_StopBits_1;           //停止位1
    uart.UART_TxMode = UART_DataMode_8;             //数据位8
    uart.UART_TxPolar = UART_Polar_Normal;          //正常极性
    uart.UART_RxMode = UART_DataMode_8;             //数据位8
    uart.UART_RxPolar = UART_Polar_Normal;          //正常极性
    uart.UART_BaudRate = 4800;                      //4800波特率
    uart.UART_ClockSet = UART_Clock_1;              //波特率时钟发生器:Pclk
    UART_Init(UART0,&uart);                         //初始化UART

    UART_TBIMConfig(UART0,UART_TRBIM_Byte);         //发送字节中断模式
    UART_RBIMConfig(UART0,UART_TRBIM_Byte);         //接收字节中断模式
    UART_ITConfig(UART0,UART_IT_RB,ENABLE);         //使能接收中断
    UART_ITConfig(UART0,UART_IT_TB,DISABLE);        //关闭发送中断 - 一样的先不动
    NVIC_Init(NVIC_UART0_IRQn,NVIC_Priority_3,ENABLE);// NVIC配置
    UART0_TxEnable();                               //使能发送
    UART0_RxEnable();                               //使能接收
}

/*******************************************************************************
  * 函数名：Hardware_UART0RecvByte
  * 功  能：UART0接收字节
  * 参  数：无
  * 返回值：接收的数据
  * 说  明：无
*******************************************************************************/
U8 Hardware_UART0RecvByte(void)
{
    return UART_RecByte(UART0);
}

/*******************************************************************************
  * 函数名：Hardware_UART1RecvByte
  * 功  能：UART1接收字节
  * 参  数：无
  * 返回值：接收的数据
  * 说  明：无
*******************************************************************************/
U8 Hardware_UART1RecvByte(void)
{
    return UART_RecByte(UART1);
}

/*******************************************************************************
  * 函数名：Hardware_UART2RecvByte
  * 功  能：UART2接收字节
  * 参  数：无
  * 返回值：接收的数据
  * 说  明：无
*******************************************************************************/
U8 Hardware_UART2RecvByte(void)
{
    return UART_RecByte(UART2);
}

/*******************************************************************************
  * 函数名：Hardware_UART3RecvByte
  * 功  能：UART3接收字节
  * 参  数：无
  * 返回值：接收的数据
  * 说  明：无
*******************************************************************************/
U8 Hardware_UART3RecvByte(void)
{
    return UART_RecByte(UART3);
}

/*******************************************************************************
  * 函数名：Hardware_UART4RecvByte
  * 功  能：UART4接收字节
  * 参  数：无
  * 返回值：接收的数据
  * 说  明：无
*******************************************************************************/
U8 Hardware_UART4RecvByte(void)
{
    return UART_RecByte(UART4);
}

/*******************************************************************************
  * 函数名：Hardware_UART5RecvByte
  * 功  能：UART5接收字节
  * 参  数：无
  * 返回值：接收的数据
  * 说  明：无
*******************************************************************************/
U8 Hardware_UART5RecvByte(void)
{
    return UART_RecByte(UART5);
}

/*******************************************************************************
  * 函数名：Hardware_UART0SendByte
  * 功  能：UART0发送字节
  * 参  数：U8 u8Data:发送的字节
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Hardware_UART0SendByte(U8 u8Data)
{
    UART_SendByte(UART0,u8Data);
}

/*******************************************************************************
  * 函数名：Hardware_UART1SendByte
  * 功  能：UART1发送字节
  * 参  数：U8 u8Data:发送的字节
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Hardware_UART1SendByte(U8 u8Data)
{
    UART_SendByte(UART1,u8Data);
}

/*******************************************************************************
  * 函数名：Hardware_UART2SendByte
  * 功  能：UART2发送字节
  * 参  数：U8 u8Data:发送的字节
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Hardware_UART2SendByte(U8 u8Data)
{
    UART_SendByte(UART2,u8Data);
}

/*******************************************************************************
  * 函数名：Hardware_UART3SendByte
  * 功  能：UART3发送字节
  * 参  数：U8 u8Data:发送的字节
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Hardware_UART3SendByte(U8 u8Data)
{
    UART_SendByte(UART3,u8Data);
}

/*******************************************************************************
  * 函数名：Hardware_UART4SendByte
  * 功  能：UART4发送字节
  * 参  数：U8 u8Data:发送的字节
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Hardware_UART4SendByte(U8 u8Data)
{
    UART_SendByte(UART4,u8Data);
}

/*******************************************************************************
  * 函数名：Hardware_UART5SendByte
  * 功  能：UART5发送字节
  * 参  数：U8 u8Data:发送的字节
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Hardware_UART5SendByte(U8 u8Data)
{
    UART_SendByte(UART5,u8Data);
}

/*******************************************************************************
  * 函数名：Hardware_UART0TXEIRQCtrl
  * 功  能：UART0发送中断控制
  * 参  数：Bool bState:开关状态
  * 返回值：无
  * 说  明：本系统使用发送空中断
*******************************************************************************/
void Hardware_UART0TXEIRQCtrl(Bool bState)
{
    if(bState)
    {
        UART_ITConfig(UART0,UART_IT_TB,ENABLE);
    }
    else
    {
        UART_ITConfig(UART0,UART_IT_TB,DISABLE);
    }
}

/*******************************************************************************
  * 函数名：Hardware_UART1TXEIRQCtrl
  * 功  能：UART1发送中断控制
  * 参  数：Bool bState:开关状态
  * 返回值：无
  * 说  明：本系统使用发送空中断
*******************************************************************************/
void Hardware_UART1TXEIRQCtrl(Bool bState)
{
    if(bState)
    {
        UART_ITConfig(UART1,UART_IT_TB,ENABLE);
    }
    else
    {
        UART_ITConfig(UART1,UART_IT_TB,DISABLE);
    }
}

/*******************************************************************************
  * 函数名：Hardware_UART2TXEIRQCtrl
  * 功  能：UART2发送中断控制
  * 参  数：Bool bState:开关状态
  * 返回值：无
  * 说  明：本系统使用发送空中断
*******************************************************************************/
void Hardware_UART2TXEIRQCtrl(Bool bState)
{
    if(bState)
    {
        UART_ITConfig(UART2,UART_IT_TB,ENABLE);
    }
    else
    {
        UART_ITConfig(UART2,UART_IT_TB,DISABLE);
    }
}

/*******************************************************************************
  * 函数名：Hardware_UART3TXEIRQCtrl
  * 功  能：UART3发送中断控制
  * 参  数：Bool bState:开关状态
  * 返回值：无
  * 说  明：本系统使用发送空中断
*******************************************************************************/
void Hardware_UART3TXEIRQCtrl(Bool bState)
{
    if(bState)
    {
        UART_ITConfig(UART3,UART_IT_TB,ENABLE);
    }
    else
    {
        UART_ITConfig(UART3,UART_IT_TB,DISABLE);
    }
}

/*******************************************************************************
  * 函数名：Hardware_UART4TXEIRQCtrl
  * 功  能：UART4发送中断控制
  * 参  数：Bool bState:开关状态
  * 返回值：无
  * 说  明：本系统使用发送空中断
*******************************************************************************/
void Hardware_UART4TXEIRQCtrl(Bool bState)
{
    if(bState)
    {
        UART_ITConfig(UART4,UART_IT_TB,ENABLE);
    }
    else
    {
        UART_ITConfig(UART4,UART_IT_TB,DISABLE);
    }
}

/*******************************************************************************
  * 函数名：Hardware_UART5TXEIRQCtrl
  * 功  能：UART5发送中断控制
  * 参  数：Bool bState:开关状态
  * 返回值：无
  * 说  明：本系统使用发送空中断
*******************************************************************************/
void Hardware_UART5TXEIRQCtrl(Bool bState)
{
    if(bState)
    {
        UART_ITConfig(UART5,UART_IT_TB,ENABLE);
    }
    else
    {
        UART_ITConfig(UART5,UART_IT_TB,DISABLE);
    }
}

/*******************************************************************************
  * 函数名：Hardware_InitUart
  * 功  能：初始化串口
  * 参  数：无
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void Hardware_InitUart(void)
{
   // 板级通讯1串口初始化
   UART0Init();
   
   // 板级通讯2串口初始化
   UART3Init();
    
   // Touch串口初始化
   UART4Init();
    
   // Wifi串口初始化
   UART5Init();
}


/***************************** 文件结束 ***************************************/
